1 module hip.hipaudio.backend.webaudio.source;
2 
3 version(WebAssembly):
4 
5 extern(C) size_t WebAudioSourceCreate();
6 extern(C) void WebAudioSourceStop(size_t src);
7 extern(C) void WebAudioSourceSetData(size_t src, size_t buffer);
8 extern(C) void WebAudioSourceSetPlaying(size_t src, bool playing);
9 extern(C) void WebAudioSourceSetLooping(size_t src, bool shouldLoop);
10 extern(C) void WebAudioSourceSetPitch(size_t src, float pitch);
11 extern(C) void WebAudioSourceSetVolume(size_t src, float volume);
12 extern(C) void WebAudioSourceSetPlaybackRate(size_t src, float rate);
13 
14 import hip.hipaudio.backend.webaudio.player;
15 import hip.hipaudio.backend.webaudio.clip;
16 import hip.hipaudio.audiosource;
17 import hip.hipaudio.backend.audioclipbase;
18 import hip.error.handler;
19 
20 
21 class HipWebAudioSource : HipAudioSource
22 {
23     protected bool isClipDirty = true;
24     protected size_t webSrc = 0;
25 
26     this(HipWebAudioPlayer player){webSrc = WebAudioSourceCreate();}
27     alias clip = HipAudioSource.clip;
28 
29 
30     override IHipAudioClip clip(IHipAudioClip newClip)
31     {
32         if(newClip != clip)
33             isClipDirty = true;
34 
35         WebAudioSourceSetData(webSrc, getBufferFromAPI(newClip).webaudio);
36         super.clip(newClip);
37         return newClip;
38     }
39 
40     alias loop = HipAudioSource.loop;
41     override bool loop(bool value)
42     {
43         bool ret = super.loop(value);
44         WebAudioSourceSetLooping(webSrc, value);
45         return ret;
46     }
47 
48         
49     override bool play()
50     {
51         WebAudioSourceSetPlaying(webSrc, true);
52         return true;
53     }
54     override bool stop()
55     {
56         WebAudioSourceStop(webSrc);
57         return true;
58     }
59     override bool pause()
60     {
61         WebAudioSourceSetPlaying(webSrc, false);
62         return true;
63     }
64     override bool play_streamed() => false;
65     
66 
67     ~this(){webSrc = 0;}
68 }